/* 
 * File:   Reel.h
 * Author: Gab'z
 *
 * Created on 1 mai 2012, 19:45
 */

#ifndef REEL_H
#define	REEL_H
#include "NombreSimple.h"
#include "Entier.h"
#include "Rationnel.h"

class Reel : public NombreSimple {
    double _x;
public:

    Reel(double x) : _x(x) {
    }

    Reel(const Reel& r) : _x(r._x) {
    }

    Reel(const Entier& e) : _x((double) e.getX()) {
    }

    Reel(const Rationnel& r) : _x((double) r.getNum() / (double) r.getDenom()) {
    }

    virtual ~Reel();

    Reel* clone() const;

    double getX() const {
        return _x;
    }

    double value() const;

    Reel& operator=(const Reel& r) {
        if (this == &r) return *this;
        _x = r._x;
        return *this;
    }
    Reel& operator+=(const Reel& r);
    Reel& operator-=(const Reel& r);
    Reel& operator*=(const Reel& r);
    Reel& operator/=(const Reel& r);

    //    Reel operator+() const {
    //        return Reel(*this);
    //    }
    //
    //    Reel operator-() const {
    //        Reel r(*this);
    //        r._x = -r._x;
    //        return r;
    //    }

    std::string toString() const;

};

Reel operator+(const Reel& r1, const Reel& r2);
Reel operator-(const Reel& r1, const Reel& r2);
Reel operator*(const Reel& r1, const Reel& r2);
Reel operator/(const Reel& r1, const Reel& r2);

#endif	/* REEL_H */
